﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Net.Mail;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using System.Linq;
using System.Collections.Generic;
using Business.GuiaDev;

namespace Presentation.GuiaDev.WebPart.VWPEnviarEmailContato
{
    public partial class VWPEnviarEmailContatoUserControl : UserControl
    {


        protected override void OnInit(EventArgs e)
        {
            btnSendEmail.Click += new EventHandler(RegistrarContato);

            base.OnInit(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        #region METODOS

        void RegistrarContato(object sender, EventArgs e)
        {
            var userName = txtUserName.Text;
            var userEmail = txtUserEmail.Text;
            var userRepeatEmail = txtEmail.Text;
            var userMailSubject = txtSubject.Text;
            var userMailMessage = txtMessage.Text;

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                try
                {
                    var fromMail = GetEmailOrigem();
                    var mailMessage = MailUtility.SendMail(userEmail + ',' + userName, new string[] { fromMail }, userMailSubject, userMailMessage, true);
                    mailMessage.Priority = System.Net.Mail.MailPriority.Normal;
                    var smptClient = new SmtpClient();
                    smptClient.Host = "smtp.abdi.com.br";
                    smptClient.EnableSsl = false;
                    smptClient.Send(mailMessage);

                    lblMensagem.Text = "Mensagem enviada com sucesso!";

                    CleanFields();
                }
                catch (Exception exception)
                {
                    lblMensagem.Text = "A mensagem será enviada em breve!";
#if DEBUG
                    Response.Write(String.Format("<script type='text/javascript'>alert('{0}')</script>", exception.Message));
#endif
                }
            });

        }

        private void CleanFields()
        {
            txtUserName.Text = "";
            txtUserEmail.Text = "";
            txtEmail.Text = "";
            txtSubject.Text = "";
            txtMessage.Text = "";
        }

        private string GetEmailOrigem()
        {
            SPWeb myWeb = SPContext.Current.Web;
            SPList myList = myWeb.Lists["DadosEventos"]; //"data evento"
            var myItem = myList.Items.Cast<SPListItem>().ToList();

            string fromEmail = myItem[0]["origem"].ToString();

            return fromEmail;
        }

        /// <summary>
        /// Envio de E-Mail.
        /// Para enviar precisa indicar qual e o E-Mail de salida.
        /// <para>Este método utiliza o host smtp de ABDI interno. Pára mais informação contactar a área de infra da ABDI.</para>
        /// </summary>
        /// <remarks></remarks>
        /// <param name="fromEmail">E-Mail de origem de email. De quem digita o e-mail</param>
        /// <param name="toEmail">E-Mail destino</param>
        /// <param name="assuntoEmail">Assunto del E-Mail, pequenha descrição.</param>
        /// <param name="mensagemEmail">Mensagem del E-Mail.</param>
        /// <exception cref="System.Exception">Lançará uma new Exception si acontecer algúm error com a criação o envio de E-Mail.</exception>
        private void envioEmail(string fromEmail, string toEmail, string assuntoEmail, string mensagemEmail)
        {
            System.Net.Mail.MailMessage correo = new System.Net.Mail.MailMessage();
            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();

            try
            {
                correo.From = new System.Net.Mail.MailAddress(fromEmail);
                correo.To.Add(new MailAddress(toEmail));
                correo.Subject = assuntoEmail;
                correo.Body = string.Format("\n\nFecha y hora GMT: {0}\n{1}", DateTime.Now.ToUniversalTime().ToString("dd/MM/yyyy HH:mm:ss"), mensagemEmail);
                correo.IsBodyHtml = false;
                correo.Priority = System.Net.Mail.MailPriority.Normal; // Prioridad
                smtp.Host = "smpt.abdi.com.br";
                //smtp.Credentials = new System.Net.NetworkCredential("usuario", "password");
                smtp.EnableSsl = false;
            }
            catch
            {
                throw new Exception("Error ao enviar E-Mail! Não pode criar o mensagem!\nPor favor comunicar com o administrador do site.");
            }

            try
            {
                smtp.Send(correo);
            }
            catch
            {
                throw new Exception("Error ao enviar E-Mail! Não pode enviar o mensagem!\nPor favor comunicar com o administrador do site.");
            }
        }

        #endregion

    }
}
